package cn.me.alphamq.client.producer;

import cn.me.alphamq.common.entity.Message;
import cn.me.alphamq.common.transaction.TransactionListener;

/**
 * 消息的生产者的接口
 *
 * @author f
 */
public interface Producer {

    /**
     * 同步发送消息
     *
     * @param message 待发送的消息
     * @return 发送的结果
     */
    SendResult sendSync(Message message);

    /**
     * 异步发送消息
     *
     * @param message 待发送的消息
     */
    void sendAsync(Message message);

    /**
     * 同步发送延迟消息
     *
     * @param message   待发送的延迟消息
     * @param delayTime 延迟的时间
     * @return 发送的结果
     */
    SendResult sendDelaySync(Message message, int delayTime);

    /**
     * 异步发送延迟消息
     *
     * @param message   待发送的延迟消息
     * @param delayTime 延迟的时间
     */
    void sendDelayAsync(Message message, int delayTime);

    /**
     * 同步发送事务消息
     *
     * @param message 待发送的事务消息
     * @return 发送的结果
     */
    SendResult sendTxSync(Message message);
}
